export default class Scanner {
  constructor(templateStr) {
    this.templateStr = templateStr
    // 指针
    this.pos = 0;
    // 尾巴，一开始就是模板字符串的原文；
    this.tail = templateStr
  }
  /**
   * 功能较弱
   * 走过指定内容
   * 没有返回值
   * Tag 有多长，比如 {{　长度为２　就让指针往后移动多少位
   */
  scan(tag) {
    if (this.tail.indexOf(tag) == 0) {
      this.pos += tag.length;
      // 尾巴也要变化,从当前字符开始，到最后的字符
      this.tail = this.templateStr.substring(this.pos);
    }
  }
  /**
   * 指针扫描
   * 遇见指定内容结束
   * 返回之前的文字
   */
  scanUtil(stopTag) {
    /**
     * 当尾巴的开通不是stopTag的时候
     * 就说明没有扫描到stopTag
     */
    // 记录一下开始的时候 pos的值
    // && 很重要，防止找不到，就算到最后了也可以停下来
    let pos_backUp = this.pos;
    while (!this.eos() && this.tail.indexOf(stopTag) != 0) {
      this.pos++;
      // 改变尾巴为当前指针这个字符开始
      this.tail = this.templateStr.substr(this.pos)
    }
    return this.templateStr.substring(pos_backUp, this.pos)
  }
  // 返回一个布尔值，判断指针是否到头
  //  end of string
  eos() {
    return this.pos >= this.templateStr.length;
  }
}